Date : 11, 12 et 23 mai 1991
Protection : MOT DE PASSE
Programme : FINAL ORBIT
Outils : CARTE PANO_AT, PERISCOPE, QUAID, S-ICE
Fichier : XXXV.EXE --> fichier VGA
XXXE.EXE --> fichier EGA
Temps pass� : 8 HEURES ( quand le d�mon vous prends !)
Soci�t� : AFTERSHOCK ENTERTAINMENT
Divers : PERISCOPE charg� � 0A9B:0000
SOFT-ICE en DRIVER.SYS
Origine : INDONESIE
Num�ro : 075
Une approche pas trop difficile puisque au bout de quelques minutes
je tombe sur une case m�moire CS:00BE que l'on ne mets pas � zero si
la r�ponse est mauvaise avant un RET. Cette case contient 0001.
2A14:420C 2E3B874713 CMP AX,CS:[BX+1347]
2A14:4211 7507 JNZ 421A ---> SAUT � forcer.
2A14:4213 2E CS:
2A14:4214 C706BE000000 MOV WORD PTR [00BE],0000
2A14:421A C3 RET
Ce saut forc� en JZ donne 8 vies au jeu. ( alors qu'avec la mauvaise
r�ponse on part avec un s�rieux handicap - 0 vie )
Mais de temps en temps je tombe sur une mauvaise surprise comme de ne
pas trouver la chaine 75072EC706... dans le ou les fichiers.
Deux solutions:
1- le programme est compact�. LZEXE ou EXEPACK.
2- La routine du mot de passe est cod�e.
Malheureusement c'est la deuxi�me solution qui est appliqu�e ici.
La routine de codage est en clair. ( heureusement )
PERISCOPE est plac� en arr�t sur l'adresse 2A14:4211 avec la commande
BM 2A14:4211 2A14:4211 W
BA pour valider et
GT pour d�marrer...et on attend.
Si ma carte PANO fonctionnait sur un 386-33 je n'attendrais pas
longtemps, de plus je pourrais imm�diatement m'arr�ter sur le bout de
code qui modifie la position m�moire 2A14:4211, mais comme les
adresses syst�mes ne sont pas disponibles sur les I/O je n'ai pas le
choix, pour l'instant.
PERISCOPE s'affiche avec ceci:
AX=0013 BX=02FE CX=0000 DX=00F3 SP=0640 BP=0D66 SI=0000 DI=4880
DS=967E ES=29AD SS=98CB CS=967E IP=0338 NV UP EI NG NZ AC PE CY
WR ES:4880 = 39
967E:0338 AA STOSB
J'ai du mal � retrouver mon CS:IP de 2A14:4211 jusqu'au moment ou je
comprends que l'adresse physique ES:4880 est la m�me !
XA 2a14:4210
2E350H
XA es:4880
2E350H
Je part � la recherche de la provenance de mes octets.
AX=079A BX=16CE CX=0001 DX=0069 SP=063E BP=0D67 SI=0000 DI=4881
DS=967E ES=9B40 SS=98CB CS=967E IP=0326 NV UP EI PL NZ NA PO NC
RD ES:16CE = 0075
967E:0326 26 ES:
967E:0327 8B07 MOV AX,[BX]
Celui-ci est tir� de 9B40:16CE, on dump pour voir...
d es:16ce
9B40:16CE 75 00 u.
9B40:16D0 07 95 06 FE FE 00 87 87-00 DB 17 07 F8 F8 00 C3 ...~~....[..xx.C
Mais cette chaine est apparement elle-m�me fabriqu�e puisque introuva-
ble dans le fichier.
Il ne reste plus qu'� d�cortiquer la routine de codage.
23 mai 1991
Repris la chasse avec SOFT-ICE, un petit probl�me comme toujours:
retrouver mon CS:4211 puisque forc�ment il ne correspond plus � celui
de PERISCOPE. Mais comme avec SOFT-ICE on ne peut pla�er des points
d'arr�ts sur les registres ( il eu �t� facile de tester IP avec la
valeur 4211 ! ) il m'a fallu tester la touche ENTER au clavier puis
remonter. Le code SCAN-CLAVIER de la touche ENTER est 1C � lire �
l'adresse 60h en I/O.
Finalement mon CS sous SOFT-ICE est 1FB2.
Je place SOFT-ICE en arr�t �criture sur l'adresse 1FB2:4210 W eq 13
pour pouvoir d�rouler la "confection" de mon 75 en 4211.
De proche en proche j'arrive � retrouver mon 75 en ES:16CE ( ES=9AC0 )
Je continue pour finalement me perdre dans des routines inextricables
et dans lesquelles en rempla�ant mon 75 par 74 cel� ne fonctionne plus.
Je reviens donc en arri�re et je m'aper�ois que la derni�re position
dans laquelle la substitution de 75 par 74 fonctionne est 9AC0:16CE.
Je d�cide, si la routine de codage est en clair de faire un CALL dans
une zone "COPYRIGHT" et de revenir en ayant d�cr�ment� mon 75 de 1.
Il y a plus simple je suis d'accord, mais � d�faut de trouver la bonne
piste... et j'ai d�j� perdu trop de temps sur ce p%@!?&*@ de jeu.
( la pelouse m'attend... )
La routine originale est la suivante:
268907 MOV ES:[BX],AX ; 9AC0:16CE = 75
45 INC BP
A1A804 MOV AX,[04A8]
A ce niveau en d�cr�mentant ES:16CE le soft fonctionne sans mot de
passe. Cette routine est en clair, on peut donc la modifier.
En d�but du segment CS:0000 on trouve apr�s un JMP une zone DATA
comprenant le COPYRIGHT et le nom de la soci�t�.
En pla�ant un CALL 3 ( pour pr�server les 3 octets du saut )
Ce n'est qu'apr�s avoir fait un CALL 0 et que tout s'est plant� que
j'ai eu l'id�e d'examiner ces trois octets; c'est un JMP !!! alors
on y touche pas et on saute 3 octets plus loin.
Donc en pla�ant un CALL 0003 � la place de l'instruction MOV AX,[04A8]
et en reportant celle-ci dans le CALL cel� devrait marcher.
Et en fait cel� fonctionne.
Routine modifi�e:
268907 MOV ES:[BX],AX
45 INC BP
E8A3FC CALL 0003
Routine pla��e en CS:0003 :
IP
0003 26803ECE1675 CMP BYTE PTR ES:[16CE],75 ; [16CE] = 75 ?
0009 � 7505 JNZ 0010 ; si pas 75 on sort.
000B � 26FE0ECE16 DEC BYTE PTR ES:[16CE] ; sinon 75 = 74 et on
0010 � A1A804 MOV AX,[04A8] ; remet l'instruction �cras�e
; par le CALL 3 puis
0013 C3 RET ; on sort.
Et le tour est jou�, ouf !
En conclusion SOFT-ICE est plus puissant que PERISCOPE mais il poss�de
� mon point de vu deux d�fauts dont un majeur il s'agit de l'impos-
sibilit� de pla�er des points d'arr�ts sur les REGISTRES et un d�faut
moindre qui est de ne pas poss�der de fonction permettant d'envoyer
les sorties �cran dans un fichier.
PERISCOPE avec ma carte PANO sur un 286 est plus puissant que SOFT-ICE
sans carte PANO sur un 386.
Avec PCTOOLS se pla�er en SECTEUR 2, DEP 349 et y mettre:
E8 A3 FC
puis SECTEUR 1, DEP 3 en �crivant:
26 80 3E CE 16 75 75 05 26 FE 0E CE 16 A1 A8 04 C3
Fichier EGA: XXXE.EXE
La modification du secteur 2 est identique mais l'octet 75 n'est plus
pla�� en ES:16CE , il se trouve en ES:1887 il faut donc remplacer
dans la chaine du secteur 1: CE16 par 8718 ( 2 fois )
FREDDY
|